#ifndef _CALL_H_
#define _CALL_H_
#include "python3/PythonGrammar30TreeConstants.h"
#include "ast/exprType.h"
#include "ast/exprType.h"
#include "ast/keywordType.h"
#include "AstTypes.h"
class IVisitor;
class Call;
typedef QSharedPointer<Call> CallPtr;

class Call: public exprType
{
public:
    explicit Call(const exprTypePtr& func, const ExprTypeList& args, const KeywordTypeList& keywords, const exprTypePtr& starargs, const exprTypePtr& kwargs, int nodeId=JJTCALL_OP);
    virtual ~Call();
    
    
    exprTypePtr func();
    void setFunc(const exprTypePtr& func);
    
    ExprTypeList args();
    void setArgs(const ExprTypeList& args);
    
    KeywordTypeList keywords();
    void setKeywords(const KeywordTypeList& keywords);
    
    exprTypePtr starargs();
    void setStarargs(const exprTypePtr& starargs);
    
    exprTypePtr kwargs();
    void setKwargs(const exprTypePtr& kwargs);
    
    
    virtual Ast::AstTypes type() const;
    virtual QString toString() const;
    virtual void accept(IVisitor* visitor, const SimpleNodePtr& node);
    virtual void traverse(IVisitor* visitor);
private:
    exprTypePtr _func;
    ExprTypeList _args;
    KeywordTypeList _keywords;
    exprTypePtr _starargs;
    exprTypePtr _kwargs;
};




#endif